#ifndef _GRATE_CONFIG_H_
#define _GRATE_CONFIG_H_

// Parameters that are read from the ini-file, or set in the constructor (values by default)
struct grate_config{
  bool auto_queue_size;
  bool auto_dfa_size;

  int QUEUE_SIZE;
  int DFA_SIZE; // less than 2^28 !!!!
  int MAXITER; // Iterations the algorithm with oracle does

  bool auto_dfs;
  int DFS_DEPTH; // set the number of last letters of the root that will be generated recursively, not in BFS-order
  
  bool USE_ORACLE; // true - Algo1Q, false - Algo1
  bool ADD_LOOPS; // if we add loops, it makes algorithm work slower, but DFA is always primitive
  bool IMPROVE_TARJAN; // if true, assumes that the resulting dfa always have one scc, this saves memory
  int GEN_EDGE_LIST; // replaces DFA with edge list, sometimes this works faster (0 - don't use, 1 - use, -1 - auto)

  bool PRECISE_LOWER; // true - use more precise function for calculating lower bound of growth rate

  bool OUTPUT_PROGRESS; // writes additional data to the log file

  grate_config(); // set values by default
  void parse_config_file(); // parses "params.ini" with values
};

#endif
